"""
实现自定义容器

问题：
    你想实现一个自定义的类来模拟内置的容器类功能，比如列表和字典。但是你不确定到底要实现哪些方法。
解决方案：
    collections 定义了很多抽象基类，当你想自定义容器类的时候它们会非常有用。
"""

import collections
import bisect


class SortedItems(collections.Sequence):
    def __init__(self, initial=None):
        self._items = sorted(initial) if initial is not None else []

    def __len__(self):
        return len(self._items)

    def __getitem__(self, index):
        return self._items[index]

    def add(self, item):
        bisect.insort(self._items, item)


def use_sorted_items():
    items = SortedItems([8, 2, 5])
    print(list(items))
    print(items[0], items[-1])
    items.add(6)
    print(list(items))
    # 输出结果：
    """
    [2, 5, 8]
    2 8
    [2, 5, 6, 8]
    """


if __name__ == '__main__':
    use_sorted_items()
